//
// Copyright (c) 2010 Alex Nesterenko
//

#include "nane/core/crt/FileSystem.h"
#include "nane/core/crt/std/StdFileSystemImpl_.h"

#include <cassert>

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool FileSystem::initialize()
    {
        assert( m_context );
        assert( m_context->fileSystem == NULL );
        nane::m_context->fileSystem = new Implementation();
        if( nane::m_context->fileSystem->initialize() == false )
        {
            shutdown();
        }
        return nane::m_context->fileSystem != NULL;
    }
    ////////////////////////////////////////////////////////////////////////////
    void FileSystem::shutdown()
    {
        if( nane::m_context->fileSystem != NULL )
        {
            nane::m_context->fileSystem->shutdown();
        }
        delete static_cast<Implementation*>(nane::m_context->fileSystem);
        nane::m_context->fileSystem = NULL;
        Holder<IFileSystem>::clear();
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
